package br.com.cfccultura.admin.control.actions.cadastros;

import java.text.DecimalFormat;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.springframework.stereotype.Component;

import br.com.cfccultura.admin.control.actions.DefaultAction;
import br.com.cfccultura.admin.control.forms.cadastros.CadastroFuncionarioForm;
import br.com.cfccultura.admin.model.enums.Ativo;
import br.com.cfccultura.admin.model.enums.TipoFuncionario;
import br.com.cfccultura.admin.model.vo.Funcionario;

@Component("/cadastroFuncionario")
public class CadastroFuncionarioAction extends DefaultAction {
	
	private static final Logger logger = Logger.getLogger(CadastroFuncionarioAction.class); 
	
	public ActionForward iniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroFuncionarioForm funcionarioForm = (CadastroFuncionarioForm) form;
		consultar(funcionarioForm, request);
		
		return mapping.findForward("body");
	}
	
	public ActionForward consultar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroFuncionarioForm funcionarioForm = (CadastroFuncionarioForm) form;
		consultar(funcionarioForm, request);
		
		return mapping.findForward("body");
	}
	
	public ActionForward incluir(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroFuncionarioForm funcionarioForm = (CadastroFuncionarioForm) form;
		Funcionario vo = new Funcionario();
		vo.setNome(funcionarioForm.getNome());
		vo.setLogin(funcionarioForm.getLogin());
		vo.setEmail(funcionarioForm.getEmail());
		vo.setTipo(TipoFuncionario.valueOf(funcionarioForm.getTipo()));
		vo.setValorHora(DecimalFormat.getInstance().parse(funcionarioForm.getValorHora()).doubleValue());
		
		getFuncionarioDAO().incluir(vo);
		
		return null;
	}	
	
	public ActionForward alterarIniciar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroFuncionarioForm funcionarioForm = (CadastroFuncionarioForm) form;
		List<Funcionario> lista = getFuncionarioDAO().consultar(new Funcionario(funcionarioForm.getIdSelecionado()));
		 
		Funcionario vo = lista.get(0);
		printJsonObjectToStream(vo, response);
		
		return null;
	}	
	
	public ActionForward alterar(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroFuncionarioForm funcionarioForm = (CadastroFuncionarioForm) form;
		Funcionario vo = new Funcionario();
		vo.setCodigo(funcionarioForm.getIdSelecionado());
		vo.setNome(funcionarioForm.getNome());
		vo.setLogin(funcionarioForm.getLogin());
		vo.setEmail(funcionarioForm.getEmail());
		vo.setTipo(TipoFuncionario.valueOf(funcionarioForm.getTipo()));
		vo.setValorHora(DecimalFormat.getInstance().parse(funcionarioForm.getValorHora()).doubleValue());
		
		getFuncionarioDAO().alterar(vo);
		
		return null;
	}
	
	public ActionForward excluir(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {		
		
		CadastroFuncionarioForm funcionarioForm = (CadastroFuncionarioForm) form;
		getFuncionarioDAO().excluir(funcionarioForm.getIdSelecionado());
		
		return mapping.findForward("body");
	}

	
	private void consultar(CadastroFuncionarioForm funcionarioForm, HttpServletRequest request) {
		Funcionario vo = new Funcionario();
		vo.setAtivo(Ativo.setValue(funcionarioForm.getAtivoConsultar()));
		
		List<Funcionario> listaResultado = getFuncionarioDAO().consultar(vo);
		request.setAttribute("listaResultado", listaResultado);

	}
}
